/**
 * 用于保存点击后的树的节点ID，用于提交到数据库使用
 * 
 * @type String
 */
var treeid = 0;
/**
 * 保存将要赋权限的name属性，销售、设计、产品经理等
 * 
 * @type String
 */
var treename = '';
roletree = Ext.extend(Ext.tree.TreePanel, {
			constructor : function() {
				roletree.superclass.constructor.call(this, {
							collapsible : true,
							region : 'west',
							split : true,
							title : "角色列表",
							iconCls : 'chimo',
							width : 200,
							rootVisible : false,
							root : new Ext.tree.AsyncTreeNode({
										id : "root",
										text : "角色",
										expanded : true
									}),
							loader : new Ext.tree.TreeLoader({
										url : 'systemmanage/permission/getallroletree.action',
										requestMethod : 'get'
									}),
							listeners : {
								click : function(_node) {
									treeid = _node.attributes.id;
									treename = _node.attributes.text;
									this.clickevent(_node);
//									alert(treename);
								}
							}
						});
				this.addEvents('clickevent');
			},
			/**
			 * 重新加载树
			 */
			reload : function() {
				this.root.reload();
				this.root.expand(true, false);
			},
			clickevent : function(_node) {
				this.fireEvent('clickevent', _node, this);
			}
		});
rolepermissionstore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy({
						method : 'GET',
						url : 'systemmanage/permission/getallrolepermission.action?name='
								+ treename + '&id=' + treeid// 代表不同角色的权限来自数据库
					}),
			reader : new Ext.data.JsonReader({
						totalProperty : 'total',
						root : 'list',
						id : 'id',
						fields : ['id', 'text']
					})
		});
rolepermissionstore.load({
			params : {
				start : 0,
				limit : 200
			}
		});
/**
 * 单个角色的权限列表
 * 
 * @class rolepermission
 * @extends Ext.grid.GridPanel
 */
var arrsmrole = new Ext.grid.CheckboxSelectionModel();// 多选单个角色的
rolepermission = Ext.extend(Ext.grid.GridPanel, {
			constructor : function() {
				rolepermission.superclass.constructor.call(this, {
							title : '<font color=\'red\'>' + treename
									+ '</font>' + '权限列表',
							id : 'allrolesspermissiongrid',
							region : 'center',
							iconCls : 'alreadypermission',
							stripeRows : true,
							frame : false,
							store : rolepermissionstore,
							sm : new Ext.grid.CheckboxSelectionModel({
										singleSelect : true
									}),
							cm : new Ext.grid.ColumnModel([
									new Ext.grid.RowNumberer(),
									new Ext.grid.CheckboxSelectionModel(), {
										id : 'id',
										header : 'ID',
										hidden : true,
										width : 80,
										sortable : true,
										dataIndex : 'id'
									}, {
										id : 'text',
										header : '权限',
										width : 200,
										sortable : true,
										dataIndex : 'text'
									}]),
							viewConfig : {
								forceFit : true
							},
							tbar : ['-', {
										text : '取消',
										iconCls : 'delete',
										handler : function() {
											// this.calclerolepermission();
											this.deleterolepermission();
										},
										scope : this
									},'-'],
							bbar : new Ext.PagingToolbar({
										pageSize : 200,
										store : allpermissionstore,
										displayInfo : true,
										displayMsg : "显示第{0}到第{1}条记录，共{2}条",
										emptyMsg : "没有记录"
									})
						});
				this.addEvents('canclerolepermission');
				this.addEvents('deleterolepermission');// 取消某个角色的权限
			},
			addstroedata : function(arr) {
				var store = this.getStore();
				var view = this.getView();
				store.insert(0, arr);
				view.refresh();
			},
			calclerolepermission : function() {
				var arr = null;// 获得选择数据
				var selmod = null;// 获得选择模式
				var store = null;// 获取存储的数据源
				var view = null;// 获得视图
				var count = null;// 获得选取的行数
				if (treeid == '') {
					Ext.Msg.alert("提示", "您未选择角色进行权限分配")
					return;
				}
				selmod = this.getSelectionModel();
				view = this.getView();
				arr = selmod.getSelections();
				store = this.getStore();
				count = selmod.getCount();// 获得了所选取的数据条数
				var datajson = '';
				for (var i = 0; i < count - 1; i++) {
					var record = arr[i];
					var recodedata = record.get('name');
					datajson += recodedata;
					datajson += ',';
				}
				var str = arr[count - 1].get('name');
				datajson += str;
				this.fireEvent('canclerolepermission', arr, this);// 事件的抛出
				for (var i = view.getRows().length - 1; i >= 0; i--) {
					if (selmod.isSelected(i)) {
						store.remove(store.getAt(i));
					}
				}
				view.refresh();
			},
			/**
			 * 动态的改变title属性
			 * 
			 * @param {}
			 *            text
			 */
			changetitle : function(treename) {

				this.setTitle('<font color=\'red\'>' + treename + '</font>'
						+ '所具有权限列表')
			},
			reload : function() {
				this.getStore().proxy = new Ext.data.HttpProxy({
							url : 'systemmanage/permission/getallrolepermission.action?name='
									+ encodeURI(encodeURI(treename)) + '&id='
									+ treeid
						});
				Ext.getCmp('allrolesspermissiongrid').getStore().reload();
				var rsm = this.getSelectionModel();// 得到行选择模型
				rsm.deselectRange(0, this.getView().getRows().length - 1);
			},
			permissionSubmitToDataBase : function() {

			},
			deleterolepermission : function() {
				var arr = null;// 获得选择数据
				var selmod = null;// 获得选择模式
				var store = null;// 获取存储的数据源
				var view = null;// 获得视图
				var count = null;// 获得选取的行数
				if (treeid == null) {
					Ext.Msg.alert("提示", "您未选择角色进行权限分配")
					return;
				}
				if (count == 0) {
					Ext.Msg.alert("提示", "您未选择权限")
					return;
				}
				selmod = this.getSelectionModel();
				view = this.getView();
				arr = selmod.getSelections();
				store = this.getStore();
				count = selmod.getCount();// 获得了所选取的数据条数
				var datajson = '';
				for (var i = 0; i < count - 1; i++) {
					var record = arr[i];
					var recodedata = record.get('text');
					datajson += recodedata;
					datajson += ',';
				}
				var str = arr[count - 1].get('text');
				datajson += str;
				var DLMask = new Ext.LoadMask(document.body, {
							msg : '后台处理中...'
						});
				DLMask.show();
				Ext.Ajax.request({// 提交
					url : 'systemmanage/permission/deleterolepermission.action',
					method : 'post',
					params : {
						datajson : datajson,
						treeid : treeid
					},
					scope:this,
					success : function(result, request) {
						var re = result.responseText;
						if (re == 'ok') {
							DLMask.hide();
							this.fireEvent('deleterolepermission');
							Ext.Msg.alert('提示', '数据操作成功');
						} else {
							DLMask.hide();
							Ext.MessageBox.alert('提示', '操作执行失败！');
						}
					}
				});
				
			}
		});
/**
 * 所有的权限列表，从这里面进行权限的选择，把这里面的权限选择后提交到角色权限列表里面，进行提交到数据库
 * 
 * @class allrolepermission
 * @extends Ext.grid.GridPanel
 */
allpermissionstore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy({
						method : 'GET',
						url : 'systemmanage/permission/getallroleauthoredper.action?name='
								+ treename + '&id=' + treeid// 代表不同角色的权限来自数据库，不是来自数据库
					}),
			reader : new Ext.data.JsonReader({
						totalProperty : 'total',
						root : 'list',
						id : 'id',
						fields : ['id', 'text']
					})
		});
allpermissionstore.load({
			params : {
				start : 0,
				limit : 200
			}
		});
var arrsmall = new Ext.grid.CheckboxSelectionModel({
			singleSelect : true
		});// 所有权限的
allrolepermission = Ext.extend(Ext.grid.GridPanel, {
			constructor : function() {
				allrolepermission.superclass.constructor.call(this, {
							collapsible : true,
							title : '角色未授权限列表',
							iconCls : 'no_alreadypermission',
							id : 'allrolesspermissiongrid1',
							region : 'east',
							stripeRows : true,
							frame : false,
							width : 250,
							store : allpermissionstore,
							// sm : new Ext.grid.CheckboxSelectionModel({
							// singleSelect : true
							// }),
							loadMask : {
								msg : '数据加载中...'
							},
							cm : new Ext.grid.ColumnModel([
									new Ext.grid.RowNumberer(),
									new Ext.grid.CheckboxSelectionModel(), {
										id : 'id',
										header : 'ID',
										hidden : true,
										width : 80,
										sortable : true,
										dataIndex : 'id'
									}, {
										id : 'text',
										header : '权限',
										width : 200,
										sortable : true,
										dataIndex : 'text'
									}]),
							sm : new Ext.grid.CheckboxSelectionModel({
										singleSelect : true
									}),
							viewConfig : {
								forceFit : true
							},
							tbar : [{
										text : '增加',
										iconCls : 'itemadd',
										handler : function() {
											// this.permissionSubmit();
											this.addpermission();
										},
										scope : this
									}, '-', {
										text : '取消',
										iconCls : 'cancel',
										handler : function() {
											var rsm = this.getSelectionModel();// 得到行选择模型
											rsm.deselectRange(0, this.getView()
															.getRows().length
															- 1);
										},
										scope : this
									}],
							bbar : new Ext.PagingToolbar({
										pageSize : 200,
										store : allpermissionstore,
										displayInfo : true,
										displayMsg : "({0}-{1})/{2}条",
										emptyMsg : "没有记录"
									})
						});
				/**
				 * 为其增加提交事件
				 */
				this.addEvents('submitjsondata');
				this.addEvents('addpermission');// 增加事件，将时间获取之后，提交到数据库，动态刷新页面
			},
			/**
			 * 将选择后的角色进行提交到中间的面板
			 */
			permissionSubmit : function() {
				var arr = null;// 获得选择数据
				var selmod = null;// 获得选择模式
				var store = null;// 获取存储的数据源
				var view = null;// 获得视图
				var count = null;// 获得选取的行数
				if (treeid == null) {
					Ext.Msg.alert("提示", "您未选择角色进行权限分配")
					return;
				}
				selmod = this.getSelectionModel();
				view = this.getView();
				arr = selmod.getSelections();
				store = this.getStore();
				count = selmod.getCount();// 获得了所选取的数据条数
				var datajson = '';
				for (var i = 0; i < count - 1; i++) {
					var record = arr[i];
					var recodedata = record.get('text');
					datajson += recodedata;
					datajson += ',';
				}
				var str = arr[count - 1].get('text');
				datajson += str;
				this.fireEvent('submitjsondata', arr, this);// 事件的抛出
				for (var i = view.getRows().length - 1; i >= 0; i--) {
					if (selmod.isSelected(i)) {
						store.remove(store.getAt(i));
					}
				}
				view.refresh();
			},
			/**
			 * 对role删除相应的权限的时候做的，这里面的数据删除之后，将重新加载到最右边的面板中进行处理
			 */
			addstroedata : function(arr) {
				var store = this.getStore();
				var view = this.getView();
				store.insert(0, arr);
				view.refresh();
			},
			reload : function() {
				this.setTitle('<font color="red">'+treename+'</font>未分配权限列表')
				this.getStore().proxy = new Ext.data.HttpProxy({
							url : 'systemmanage/permission/getallroleauthoredper.action?name='
									+ encodeURI(encodeURI(treename)) + '&id='
									+ treeid
						});
				Ext.getCmp('allrolesspermissiongrid1').getStore().reload();
				var rsm = this.getSelectionModel();// 得到行选择模型
				rsm.deselectRange(0, this.getView().getRows().length - 1);
			},
			addpermission : function() {				
				var arr = null;// 获得选择数据
				var selmod = null;// 获得选择模式
				var store = null;// 获取存储的数据源
				var view = null;// 获得视图
				var count = null;// 获得选取的行数
				selmod = this.getSelectionModel();
				view = this.getView();
				arr = selmod.getSelections();
				store = this.getStore();
				count = selmod.getCount();// 获得了所选取的数据条数
				if (treeid == 0) {
					Ext.Msg.alert("提示", "您未选择角色进行权限分配")
					return;
				}
				if (count == 0) {
					Ext.Msg.show({
						title:'提示',
						msg:'你没有选择相应的权限进行添加',
						icon:Ext.Msg.ERROR,
						buttons:Ext.MessageBox.OK
					});
					return;
				}
				
				var datajson = '';
				for (var i = 0; i < count - 1; i++) {
					var record = arr[i];
					var recodedata = record.get('text');
					datajson += recodedata;
					datajson += ',';
				}
				var str = arr[count - 1].get('text');
				datajson += str;
				var DLMask = new Ext.LoadMask(document.body, {
							msg : '后台处理中...'
						});
				DLMask.show();
				Ext.Ajax.request({// 提交
					url : 'systemmanage/permission/updaterolepermission.action',
					method : 'post',
					params : {
						datajson : datajson,
						treeid : treeid
					},
					scope:this,
					success : function(result, request) {
						var re = result.responseText;
						if (re == 'ok') {
							DLMask.hide();
							this.fireEvent('addpermission');
							Ext.Msg.alert('提示', '   数据操作成功     '); 
						} else {
							DLMask.hide();
							Ext.MessageBox.alert('提示', '操作执行失败！');
						}
					}
				});

			}
		});
/**
 * 总的组装面板，在这里进行事件操作
 * 
 * @class role
 * @extends Ext.Panel
 */
role = Ext.extend(Ext.Panel, {
	roletree1 : null,
	rolepermission1 : null,
	rolepermission2 : null,
	constructor : function() {
		this.roletree1 = new roletree();
		this.rolepermission1 = new rolepermission();
		this.rolepermission2 = new allrolepermission();
		role.superclass.constructor.call(this, {
			layout : 'border',
			defaults : {
				split : true
			},
			items : [this.roletree1, this.rolepermission1, this.rolepermission2]
		});
		this.rolepermission2.on('submitjsondata', function(arr) {
					this.rolepermission1.addstroedata(arr)
				}, this);
		this.rolepermission1.on('canclerolepermission', function(arr) {
					this.rolepermission2.addstroedata(arr)
				}, this);
		this.roletree1.on('clickevent', function(_node) {
					this.rolepermission1.changetitle(_node.attributes.text);
				}, this);// 改变面板标题
		this.roletree1.on('clickevent', function(_node) {
					this.rolepermission2.reload()
				}, this);// 重新加载store
		this.roletree1.on('clickevent', function(_node) {
					this.rolepermission1.reload()
				}, this);// 重新加载store
		this.rolepermission2.on('addpermission', function() {
					this.roletree1.reload();
					this.rolepermission1.reload();
					this.rolepermission2.reload();
				}, this);
		this.rolepermission1.on('deleterolepermission', function() {
					this.roletree1.reload();
					this.rolepermission1.reload();
					this.rolepermission2.reload();
				}, this);
	}
});
/**
 * 函数入口
 * 
 * @class
 * @extends demo.module
 */
Ext.extend(demo.module, {
			init : function() {
				this.body = new role();
				this.main.add(this.body);
				this.main.doLayout();
			}
		});